/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uccart_project.controller;

import com.uccart_project.model.Usuario;
import com.uccart_project.util.EntityManagerFactorySingleton;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.table.TableModel;

/**
 *
 * @author KNO
 */
public class Controller_Usuario {

    private String ultimoTipoBusqueda;
    private String ultimoParamtroBusqueda;
    private List result;
    private Controller_Application controllerApplication;

    public Controller_Usuario(Controller_Application controllerApplication) {
        this.controllerApplication = controllerApplication;
    }

    private Controller_Usuario() {
    }
    
    public void cerrarSession(){
        this.controllerApplication.cerrarSession();
    }

    public void agregarNuevoUsuario(String id, String password, String nombre, Integer tipo) {

        System.out.println("agregarNuevoUsuario " + id + password + nombre + tipo);

        Usuario usuario = new Usuario();
        usuario.setUsId(id);
        usuario.setUsPw(password);
        usuario.setUsNombre(nombre);
        usuario.setUsTipo(tipo);


        EntityManager em = EntityManagerFactorySingleton.getFactory().createEntityManager();

// Inicio de transacción
        em.getTransaction().begin();

        em.persist(usuario);

        em.getTransaction().commit();

        em.close();
    }

    public List editarUsuario(String tipoBusqueda, String parametroBusqueda) {

        System.out.println("editarUsuario " + tipoBusqueda + parametroBusqueda);
        EntityManager em = EntityManagerFactorySingleton.getFactory().createEntityManager();
        em.getTransaction().begin();
        switch (tipoBusqueda) {
            case "ID":
                result = em.createNamedQuery("Usuario.findByUsId").setParameter("usId", parametroBusqueda).getResultList();
                break;
            case "Nombre":
                result = em.createNamedQuery("Usuario.findByUsNombre").setParameter("usNombre", parametroBusqueda).getResultList();
                break;
            case "Tipo":
                result = em.createNamedQuery("Usuario.findByUsPw").setParameter("usPw", parametroBusqueda).getResultList();
                break;
            default:
                result = em.createNamedQuery("Usuario.findAll").getResultList();
                break;
        }
        em.getTransaction().commit();
        em.close();
        if (!result.isEmpty()) {
        }
        return result;
    }

    public void guardarUsuario(ArrayList<Integer> editados, TableModel model) {

        EntityManager em = EntityManagerFactorySingleton.getFactory().createEntityManager();
         Query update_query = em.createNamedQuery("Usuario.UpDateByUsId") ;
        em.getTransaction().begin();
        for (Integer fila : editados) {
//            Usuario rowUsuario = new Usuario();
//            rowUsuario.setUsId((String) model.getValueAt(fila, 0));
//            rowUsuario.setUsNombre((String) model.getValueAt(fila, 0));
//            rowUsuario.setUsPw((String) model.getValueAt(fila, 0));
//            rowUsuario.setUsTipo((Integer) model.getValueAt(fila, 0));

            update_query.setParameter("usId", (String) model.getValueAt(fila,0));
            update_query.setParameter("usPw", (String) model.getValueAt(fila, 1));
            update_query.setParameter("usNombre", (String) model.getValueAt(fila, 2));
            update_query.setParameter("usTipo", (Integer) model.getValueAt(fila, 3));
            int updateData = update_query.executeUpdate();
            System.out.println(updateData + " record updated");
            
        }
        em.getTransaction().commit();
        em.close();

    }
}
